From 4e7dbf76227e8c7be7897dc81def3011f637864d Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
Date: Thu, 30 May 2013 11:54:04 +0200
Subject: [PATCH] add support for dropping with FAILED_POLICY

---
 include/linux/fib_rules.h |    4 ++++
 include/linux/rtnetlink.h |    1 +
 ip/rtm_map.c              |    4 ++++
 3 files changed, 9 insertions(+)

--- a/include/linux/fib_rules.h
+++ b/include/linux/fib_rules.h
@@ -64,6 +64,10 @@ enum {
 	FR_ACT_BLACKHOLE,	/* Drop without notification */
 	FR_ACT_UNREACHABLE,	/* Drop with ENETUNREACH */
 	FR_ACT_PROHIBIT,	/* Drop with EACCES */
+	FR_ACT_RES8,
+	FR_ACT_RES9,
+	FR_ACT_RES10,
+	FR_ACT_FAILED_POLICY,	/* Drop with EPERM */
 	__FR_ACT_MAX,
 };
 
--- a/include/linux/rtnetlink.h
+++ b/include/linux/rtnetlink.h
@@ -210,6 +210,7 @@ enum {
 	RTN_THROW,		/* Not in this table		*/
 	RTN_NAT,		/* Translate this address	*/
 	RTN_XRESOLVE,		/* Use external resolver	*/
+	RTN_FAILED_POLICY,	/* Source address failed policy */
 	__RTN_MAX
 };
 
--- a/ip/rtm_map.c
+++ b/ip/rtm_map.c
@@ -49,6 +49,8 @@ char *rtnl_rtntype_n2a(int id, char *buf
 		return "nat";
 	case RTN_XRESOLVE:
 		return "xresolve";
+	case RTN_FAILED_POLICY:
+		return "failed_policy";
 	default:
 		snprintf(buf, len, "%d", id);
 		return buf;
@@ -84,6 +86,8 @@ int rtnl_rtntype_a2n(int *id, char *arg)
 		res = RTN_UNICAST;
 	else if (strcmp(arg, "throw") == 0)
 		res = RTN_THROW;
+	else if (strcmp(arg, "failed_policy") == 0)
+		res = RTN_FAILED_POLICY;
 	else {
 		res = strtoul(arg, &end, 0);
 		if (!end || end == arg || *end || res > 255)
